/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package servlets;

import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import jmysql.CArea;
import validaciones.ValidacionData;
import validaciones.ValidateCompare2JSON;
import validaciones.ValidateJSON;

/**
 *
 * @author dblack
 */
public class CModificarArea extends HttpServlet {

    /** 
     * Processes requests for both HTTP <code>GET</code> and <code>POST</code> methods.
     * @param request servlet request
     * @param response servlet response
     * @throws ServletException if a servlet-specific error occurs
     * @throws IOException if an I/O error occurs
     */
    protected void processRequest(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        response.setContentType("text/html;charset=UTF-8");
        PrintWriter out = response.getWriter();
        try {
            /* TODO output your page here
            out.println("<html>");
            out.println("<head>");
            out.println("<title>Servlet CModificarArea</title>");  
            out.println("</head>");
            out.println("<body>");
            out.println("<h1>Servlet CModificarArea at " + request.getContextPath () + "</h1>");
            out.println("</body>");
            out.println("</html>");
             */
        } finally {            
            out.close();
        }
    }

    // <editor-fold defaultstate="collapsed" desc="HttpServlet methods. Click on the + sign on the left to edit the code.">
   
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        doPost(request, response);
    }

    
    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
            //primero agarramos los viejos datos
		ValidateJSON new_data=new ValidateJSON();//la nueva data a cambiar
		ValidateJSON old_data=new ValidateJSON();//la vieja data a comparar
		ValidacionData validacion=new ValidacionData();//para guardar el json de envio
		
		/*Guardamos la nueva data*/	 
		new_data.put("new_nomarea", request.getParameter("new_nomarea").trim().toLowerCase());
		new_data.put("new_descripcion", request.getParameter("new_descripcion").trim());
		new_data.put("new_ubicacion", request.getParameter("new_ubicacion").trim());
		new_data.put("new_estado", Integer.parseInt(request.getParameter("new_estado")));
		
		/*validamos la nueva data*/
		if(validacion.correcto&&new_data.getString("new_descripcion").length()==0)
			validacion.SetValores("1", "m_descripcion", "el campo no puede ser vacío", false);
		if(validacion.correcto&&!new_data.getString("new_nomarea").matches("^([a-zA-Z])[a-z0-9_]{3,70}$"))
			validacion.SetValores("1", "m_nomarea", "dato inválido", false);
		if(validacion.correcto&&new_data.getString("new_ubicacion").length()==0)
			new_data.replace("new_ubicacion","-");
		
		/*Obtenemos la vieja data*/
		if(validacion.correcto){
			old_data.put("old_nomarea", request.getParameter("old_nomarea").trim().toLowerCase());
			old_data.put("old_descripcion", request.getParameter("old_descripcion").trim());
			old_data.put("old_ubicacion", request.getParameter("old_ubicacion").trim());
			old_data.put("old_estado", Integer.parseInt(request.getParameter("old_estado")));
		}
		
		/*
		 * Creamos el objeto de comparacion
		 * */
		ValidateCompare2JSON compare2JSON=new ValidateCompare2JSON(old_data.getJSONObject(),new_data.getJSONObject());

		//comparamos recibe el campo que cambiará, los datos a comparar old y new
		if(validacion.correcto&&!compare2JSON.BooleanCompareIgnoreCase("nomarea","old_nomarea","new_nomarea")){
			//ya que no son iguales, debe compararse en la base de datos
			CArea ca=new CArea();
			if(ca.Existe(new_data.getString("new_nomarea")))
				validacion.SetValores("20", "m_nomarea", "este nombre de área ya existe en el sistema", false);
		}

		//Faltan los demás comparaciones
		if(validacion.correcto){
			compare2JSON.Compare("descripcion","old_descripcion","new_descripcion");
			compare2JSON.Compare("ubicacion","old_ubicacion","new_ubicacion");
			compare2JSON.Compare("estado","old_estado","new_estado");
		}
		
		//podemos proseguir ya que sigue correcto y la longitud en >0
		if(validacion.correcto&&compare2JSON.getQuery().length()>0){
			CArea ca=new CArea();
			int idarea=Integer.parseInt(request.getParameter("idarea"));//fue guardado en el post
			if(ca.UpdateArea(idarea,compare2JSON.getQuery())){
				validacion.SetValores("10", "-", "Datos actualizados con éxito", true);
			}else{//fallo el update
				validacion.SetValores("30", "m_nomarea", "Fallo la actualización", false);
			}
		}else if(validacion.correcto&&compare2JSON.getQuery().length()==0){//no hay cambios
			validacion.SetValores("10", "-", "Datos actualizados con éxito", true);
		}

		PrintWriter out = response.getWriter();		
		response.setContentType("application/json");
		
		out.print(validacion.getJSON());//imprimimos el resultado
		out.close();
    }

    
    @Override
    public String getServletInfo() {
        return "Short description";
    }// </editor-fold>
}
